home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************************
- * frame.h
- *
- * This header file is included by all C modules in POV-Ray. It defines all
- * globally-accessible types and constants.
- *
- * from Persistence of Vision(tm) Ray Tracer
- * Copyright 1996 Persistence of Vision Team
- *---------------------------------------------------------------------------
- * NOTICE: This source code file is provided so that users may experiment
- * with enhancements to POV-Ray and to port the software to platforms other
- * than those supported by the POV-Ray Team. There are strict rules under
- * which you are permitted to use this file. The rules are in the file
- * named POVLEGAL.DOC which should be distributed with this file. If
- * POVLEGAL.DOC is not available or for more info please contact the POV-Ray
- * Team Coordinator by leaving a message in CompuServe's Graphics Developer's
- * Forum. The latest version of POV-Ray may be found there as well.
- *
- * This program is based on the popular DKB raytracer version 2.12.
- * DKBTrace was originally written by David K. Buck.
- * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
- *
- * Modified by Andreas Dilger to add PNG file format support 05/09/95
- *
- *****************************************************************************/
-
- #ifndef FRAME_H
- #define FRAME_H
-
- /* Generic header for all modules */
-
- #include <math.h>
- #include <stdio.h>
- #include <string.h>
- #include <limits.h>
- #include <tos.h>
- #include "config.h"
-
-
- #ifndef READ_ENV_VAR
- #define READ_ENV_VAR Warning(0.0,"Environment variable not implemented on this platform.\n");
- #endif
-
- #ifndef PROCESS_POVRAY_INI
- #define PROCESS_POVRAY_INI Warning(0.0,"Reading 'povray.ini' not implemented on this platform.\n");
- #endif
-
- #ifndef POV_PRE_SHUTDOWN
- #define POV_PRE_SHUTDOWN
- #endif
-
- #ifndef POV_POST_SHUTDOWN
- #define POV_POST_SHUTDOWN
- #endif
-
- #ifndef POV_PRE_RENDER
- #define POV_PRE_RENDER
- #endif
-
- #ifndef ALT_WRITE_INI_FILE
- #define ALT_WRITE_INI_FILE
- #endif
-
- #ifndef CONFIG_MATH
- #define CONFIG_MATH
- #endif
-
- #ifndef CONST
- #define CONST
- #endif
-
- #ifndef EPSILON
- #define EPSILON 1.0e-10
- #endif
-
- /* POV_NAME_MAX is for file systems that have a separation of the filename
- ** into name.ext. The POV_NAME_MAX is the name part. FILE_NAME_LENGTH
- ** is the sum of name + ext */
- #ifndef POV_NAME_MAX
- #define POV_NAME_MAX 8
- #endif
-
- #ifndef FILE_NAME_LENGTH
- #define FILE_NAME_LENGTH 150
- #endif
-
- #ifndef HUGE_VAL
- #define HUGE_VAL 1.0e+17
- #endif
-
- /* Maximum lengths of a bounding box. */
-
- #ifndef BOUND_HUGE
- #define BOUND_HUGE 2.0e10
- #endif
-
- /*
- * [DB 8/94]
- *
- * If the width of a bounding box in one dimension is greater than
- * the critical length, the bounding box should be set to infinite.
- */
-
- #ifndef CRITICAL_LENGTH
- #define CRITICAL_LENGTH 1.0e6
- #endif
-
- #ifndef DBL_FORMAT_STRING
- #define DBL_FORMAT_STRING "%lf"
- #endif
-
- #ifndef DEFAULT_OUTPUT_FORMAT
- #define DEFAULT_OUTPUT_FORMAT 't'
- #endif
-
- #ifndef READ_SYS_IMAGE
- #define READ_SYS_IMAGE(i,n) Read_Targa_Image((i),(n))
- #endif
-
- #ifndef GET_SYS_FILE_HANDLE
- #define GET_SYS_FILE_HANDLE Get_Targa_File_Handle
- #endif
-
- #ifndef SYS_DEF_EXT
- #define SYS_DEF_EXT ".tga"
- #endif
-
- #ifndef FILENAME_SEPARATOR
- #define FILENAME_SEPARATOR '/'
- #endif
-
- #ifndef DRIVE_SEPARATOR
- #define DRIVE_SEPARATOR ':'
- #endif
-
- #ifndef READ_FILE_STRING
- #define READ_FILE_STRING "rb"
- #endif
-
- #ifndef WRITE_FILE_STRING
- #define WRITE_FILE_STRING "wb"
- #endif
-
- #ifndef APPEND_FILE_STRING
- #define APPEND_FILE_STRING "ab"
- #endif
-
- #ifndef DELETE_FILE_ERR
- #define DELETE_FILE_ERR -1
- #endif
-
- #ifndef DELETE_FILE
- #define DELETE_FILE(name) unlink(name)
- #endif
-
- #ifndef RENAME_FILE_ERR
- #define RENAME_FILE_ERR -1
- #endif
-
- #ifndef RENAME_FILE
- #define RENAME_FILE(orig,new) rename(orig,new)
- #endif
-
- #ifndef NORMAL
- #define NORMAL '0'
- #endif
-
- #ifndef GREY
- #define GREY 'G'
- #endif
-
- #ifndef DEFAULT_DISPLAY_GAMMA
- #define DEFAULT_DISPLAY_GAMMA 2.2
- #endif
-
- #ifndef DEFAULT_ASSUMED_GAMMA
- #define DEFAULT_ASSUMED_GAMMA 1.0
- #endif
-
- #ifndef START_TIME
- #define START_TIME time(&tstart);
- #endif
-
- #ifndef STOP_TIME
- #define STOP_TIME time(&tstop);
- #endif
-
- #ifndef TIME_ELAPSED
- #define TIME_ELAPSED difftime (tstop, tstart);
- #endif
-
- #ifndef PRECISION_TIMER_AVAILABLE
- #define PRECISION_TIMER_AVAILABLE 0
- #endif
-
- #ifndef PRECISION_TIMER_INIT
- #define PRECISION_TIMER_INIT
- #endif
-
- #ifndef PRECISION_TIMER_START
- #define PRECISION_TIMER_START ;
- #endif
-
- #ifndef PRECISION_TIMER_STOP
- #define PRECISION_TIMER_STOP
- #endif
-
- #ifndef PRECISION_TIMER_COUNT
- #define PRECISION_TIMER_COUNT 0
- #endif
-
- #ifndef STARTUP_POVRAY
- #define STARTUP_POVRAY
- #endif
-
- #ifndef PRINT_OTHER_CREDITS
- #define PRINT_OTHER_CREDITS
- #endif
-
- #ifndef TEST_ABORT
- #define TEST_ABORT
- #endif
-
- #ifndef FINISH_POVRAY /* This comment has been added */
- #define FINISH_POVRAY(n) exit(n); /* to make doubly sure that these */
- #endif /* lines get patched */
-
- #ifdef COOPERATE /* this allows code that uses COOPERATE */
- #define COOPERATE_0 COOPERATE /* to continue to work with the new form */
- #define COOPERATE_1 COOPERATE
- #endif
-
- #ifndef COOPERATE_0
- #define COOPERATE_0
- #endif
-
- #ifndef COOPERATE_1
- #define COOPERATE_1
- #endif
-
- #ifndef POV_PRE_PIXEL
- #define POV_PRE_PIXEL(x,y,c)
- #endif
-
- #ifndef POV_POST_PIXEL
- #define POV_POST_PIXEL(x,y,c)
- #endif
-
- #ifndef DBL
- #define DBL double
- #endif
-
- #ifndef SNGL
- #define SNGL float
- #endif
-
- #ifndef COLC
- #define COLC float
- #endif
-
- #ifndef PARAMS
- #define PARAMS(x) x
- #endif
-
- #ifndef ANSIFUNC
- #define ANSIFUNC 1
- #endif
-
- #ifndef M_PI
- #define M_PI 3.1415926535897932384626
- #endif
-
- #ifndef M_PI_2
- #define M_PI_2 1.57079632679489661923
- #endif
-
- #ifndef TRUE
- #define TRUE 1
- #define FALSE 0
- #endif
-
- #ifndef IFF_SWITCH_CAST
- #define IFF_SWITCH_CAST (int)
- #endif
-
- #ifndef PRINT_CREDITS
- #define PRINT_CREDITS Print_Credits();
- #endif
-
- #ifndef PRINT_STATS
- #define PRINT_STATS(a) Print_Stats(a);
- #endif
-
- #ifndef WAIT_FOR_KEYPRESS
- #define WAIT_FOR_KEYPRESS
- #else
- #define WAIT_FOR_KEYPRESS_EXISTS
- #endif
-
- /*
- * The GET_KEY macro returns the key pressed by the user.
- * The function used to get the pressed key has to be specified
- * in the machine dependent config.h file.
- */
- #ifndef GET_KEY
- #define GET_KEY
- #else
- #define GET_KEY_EXISTS
- #endif
-
- #ifndef CDECL
- #define CDECL
- #endif
-
- #ifndef MAX_BUFSIZE
- #define MAX_BUFSIZE INT_MAX
- #endif
-
- /* If compiler version is undefined, then make it 'u' for unknown */
- #ifndef COMPILER_VER
- #define COMPILER_VER ".u"
- #endif
-
- #ifndef QSORT
- #define QSORT(a,b,c,d) qsort((a),(b),(c),(d))
- #endif
-
- #ifndef MAIN_RETURN_TYPE
- #define MAIN_RETURN_TYPE void
- #endif
-
- #ifndef MAIN_RETURN_STATEMENT
- #define MAIN_RETURN_STATEMENT
- #endif
-
- #ifndef POV_RAND
- #define POV_RAND() POV_Std_rand()
- #endif
-
- #ifndef POV_SRAND
- #define POV_SRAND(i) POV_Std_srand(i)
- #endif
-
- #ifndef POV_BANNER
- #define POV_BANNER(s) POV_Std_Banner(s)
- #endif
-
- #ifndef POV_WARNING
- #define POV_WARNING(s) POV_Std_Warning(s)
- #endif
-
- #ifndef POV_RENDER_INFO
- #define POV_RENDER_INFO(s) POV_Std_Render_Info(s)
- #endif
-
- #ifndef POV_STATUS_INFO
- #define POV_STATUS_INFO(s) POV_Std_Status_Info(s)
- #endif
-
- #ifndef POV_DEBUG_INFO
- #define POV_DEBUG_INFO(s) POV_Std_Debug_Info(s)
- #endif
-
- #ifndef POV_FATAL
- #define POV_FATAL(s) POV_Std_Fatal(s)
- #endif
-
- #ifndef POV_STATISTICS
- #define POV_STATISTICS(s) POV_Std_Statistics(s)
- #endif
-
- #ifndef POV_DISPLAY_INIT
- #define POV_DISPLAY_INIT(w,h,f) POV_Std_Display_Init((w),(h));
- #endif
-
- #ifndef POV_DISPLAY_CLOSE
- #define POV_DISPLAY_CLOSE POV_Std_Display_Close();
- #endif
-
- #ifndef POV_DISPLAY_FINISHED
- #define POV_DISPLAY_FINISHED POV_Std_Display_Finished();
- #endif
-
- #ifndef POV_DISPLAY_PLOT
- #define POV_DISPLAY_PLOT(x,y,r,g,b,a) POV_Std_Display_Plot((x),(y),(r),(g),(b),(a));
- #endif
-
- #ifndef POV_DISPLAY_PLOT_RECT
- #define POV_DISPLAY_PLOT_RECT(x1,x2,y1,y2,r,g,b,a) POV_Std_Display_Plot_Rect((x1),(x2),(y1),(y2),(r),(g),(b),(a));
- #endif
-
- #ifndef POV_DISPLAY_PLOT_BOX
- #define POV_DISPLAY_PLOT_BOX(x1,y1,x2,y2,r,g,b,a) POV_Std_Display_Plot_Box((x1),(y1),(x2),(y2),(r),(g),(b),(a));
- #endif
-
- #ifndef POV_SPLIT_PATH
- #define POV_SPLIT_PATH(s,p,f) POV_Split_Path((s),(p),(f))
- #endif
-
- #ifndef SPLIT_TIME
- #define SPLIT_TIME(d,h,m,s) POV_Std_Split_Time ((d),(h),(m),(s))
- #endif
-
- #ifndef NEW_LINE_STRING
- #define NEW_LINE_STRING "\n"
- #endif
-
- /* These values determine the minumum and maximum distances
- that qualify as ray-object intersections */
- #define Small_Tolerance 0.001
- #define Max_Distance 1.0e7
-
-
-
- /*****************************************************************************
- *
- * MEMIO.C Memory macros
- *
- *****************************************************************************/
-
- #ifndef __FILE__
- #define __FILE__ ""
- #endif
-
- #ifndef __LINE__
- #define __LINE__ (-1)
- #endif
-
- #ifndef POV_MALLOC
- #define POV_MALLOC(size,msg) pov_malloc ((size), __FILE__, __LINE__, (msg))
- #endif
-
- #ifndef POV_CALLOC
- #define POV_CALLOC(nitems,size,msg) pov_calloc ((nitems), (size), __FILE__, __LINE__, (msg))
- #endif
-
- #ifndef POV_REALLOC
- #define POV_REALLOC(ptr,size,msg) pov_realloc ((ptr), (size), __FILE__, __LINE__, (msg))
- #endif
-
- #ifndef POV_FREE
- #define POV_FREE(ptr) pov_free ((void *)(ptr), __FILE__, __LINE__)
- #endif
-
- #ifndef POV_SHELLOUT
- #define POV_SHELLOUT(string) pov_shellout(string)
- #endif
-
- #ifndef POV_MAX_CMD_LENGTH
- #define POV_MAX_CMD_LENGTH 250
- #endif
-
- #ifndef POV_SYSTEM
- #define POV_SYSTEM(string) system(string)
- #endif
-
-
- /*****************************************************************************
- *
- * Typedefs that need to be known here.
- *
- *****************************************************************************/
-
- typedef struct Object_Struct OBJECT;
- typedef struct Ray_Struct RAY;
- typedef struct istack_struct ISTACK;
- typedef struct istk_entry INTERSECTION;
-
-
-
- /*****************************************************************************
- *
- * Scalar, color and vector stuff.
- *
- *****************************************************************************/
-
- typedef DBL UV_VECT [2];
- typedef DBL VECTOR [3];
- typedef DBL MATRIX [4][4];
- typedef DBL EXPRESS [5];
- typedef COLC COLOUR [5];
- typedef COLC RGB [3];
- typedef int TOKEN;
- typedef int CONSTANT;
- typedef short WORD;
-
- /* Stuff for bounding boxes. */
-
- #define BBOX_VAL SNGL
-
- typedef BBOX_VAL BBOX_VECT[3];
-
- #define Assign_BBox_Vect(d,s) \
- { \
- (d)[X] = (s)[X]; \
- (d)[Y] = (s)[Y]; \
- (d)[Z] = (s)[Z]; \
- }
-
- #define Make_BBox(BBox, llx, lly, llz, lex, ley, lez) \
- { \
- (BBox).Lower_Left[X] = (BBOX_VAL)(llx); \
- (BBox).Lower_Left[Y] = (BBOX_VAL)(lly); \
- (BBox).Lower_Left[Z] = (BBOX_VAL)(llz); \
- (BBox).Lengths[X] = (BBOX_VAL)(lex); \
- (BBox).Lengths[Y] = (BBOX_VAL)(ley); \
- (BBox).Lengths[Z] = (BBOX_VAL)(lez); \
- }
-
- #define Make_BBox_from_min_max(BBox, mins, maxs) \
- { \
- (BBox).Lower_Left[X] = (BBOX_VAL)(mins[X]); \
- (BBox).Lower_Left[Y] = (BBOX_VAL)(mins[Y]); \
- (BBox).Lower_Left[Z] = (BBOX_VAL)(mins[Z]); \
- (BBox).Lengths[X] = (BBOX_VAL)(maxs[X]-mins[X]); \
- (BBox).Lengths[Y] = (BBOX_VAL)(maxs[Y]-mins[Y]); \
- (BBox).Lengths[Z] = (BBOX_VAL)(maxs[Z]-mins[Z]); \
- }
-
- #define Make_min_max_from_BBox(mins, maxs, BBox) \
- { \
- (mins)[X] = (BBox).Lower_Left[X]; \
- (mins)[Y] = (BBox).Lower_Left[Y]; \
- (mins)[Z] = (BBox).Lower_Left[Z]; \
- (maxs)[X] = (mins)[X] + (BBox).Lengths[X]; \
- (maxs)[Y] = (mins)[Y] + (BBox).Lengths[Y]; \
- (maxs)[Z] = (mins)[Z] + (BBox).Lengths[Z]; \
- }
-
- /* Stuff for SNGL vectors. */
-
- typedef SNGL SNGL_VECT[3];
-
- #define Assign_SNGL_Vect(d,s) \
- { \
- (d)[X] = (s)[X]; \
- (d)[Y] = (s)[Y]; \
- (d)[Z] = (s)[Z]; \
- }
-
-
- /* Vector array elements. */
- #define U 0
- #define V 1
-
- #define X 0
- #define Y 1
- #define Z 2
- #define T 3
-
-
- /* Colour array elements. */
-
- #define RED 0
- #define GREEN 1
- #define BLUE 2
- #define FILTER 3
- #define TRANSM 4
-
- /* Macros to manipulate scalars, vectors, and colors. */
-
- #define Destroy_Float(x) if ((x)!=NULL) POV_FREE(x)
-
- #define Assign_Vector(d,s) memcpy((d),(s),sizeof(VECTOR))
- #define Destroy_Vector(x) if ((x)!=NULL) POV_FREE(x)
-
- #define Assign_UV_Vect(d,s) memcpy((d),(s),sizeof(UV_VECT))
- #define Destroy_UV_Vect(x) if ((x)!=NULL) POV_FREE(x)
-
- #define Assign_Colour(d,s) memcpy((d),(s),sizeof(COLOUR))
- #define Make_Colour(c,r,g,b) {(c)[RED]=(r);(c)[GREEN]=(g);(c)[BLUE]=(b);(c)[FILTER]=0.0;(c)[TRANSM]=0.0;}
- #define Make_ColourA(c,r,g,b,a,t) {(c)[RED]=(r);(c)[GREEN]=(g);(c)[BLUE]=(b);(c)[FILTER]=(a);(c)[TRANSM]=t;}
- #define Make_Vector(v,a,b,c) { (v)[X]=(a);(v)[Y]=(b);(v)[Z]=(c); }
- #define Destroy_Colour(x) if ((x)!=NULL) POV_FREE(x)
- #define Make_RGB(c,r,g,b) {(c)[RED]=(r);(c)[GREEN]=(g);(c)[BLUE]=(b);}
-
-
-
- /*****************************************************************************
- *
- * Hi-resolution counter.
- *
- *****************************************************************************/
-
- /* Define counter resolution. */
-
- #define LOW_RESOLUTION 1
- #define HIGH_RESOLUTION 2
-
- #define COUNTER_RESOLUTION HIGH_RESOLUTION
-
- #if COUNTER_RESOLUTION == HIGH_RESOLUTION
-
- /* 64bit counter. */
-
- typedef struct Counter_Struct COUNTER;
-
- struct Counter_Struct
- {
- unsigned long high, low;
- };
-
- #define DBL_Counter(x) ( (x).low + Sqr(65536.0)*(DBL)(x).high )
- #define Long_To_Counter(i,x) { (x).low = i; (x).high = 0; }
- #define Init_Counter(x) { (x).high = (x).low = 0L; }
- #define Test_Zero_Counter(x) (((x).low == 0L) && ((x).high == 0L))
- #define Increase_Counter(x) { if ((++(x).low) == 0L) { (x).high++; } }
- #define Add_Counter(x, a, b) \
- { \
- (x).low = (a).low + (b).low; \
- \
- if (((x).low < (a).low) || ((x).low < (b).low)) \
- { \
- /* add with carry */ \
- (x).high = (a).high + (b).high + 1; \
- } \
- else \
- { \
- /* add without carry */ \
- (x).high = (a).high + (b).high; \
- } \
- }
-
- #else
-
- /* 32bit counter. */
-
- typedef unsigned long COUNTER;
-
- #define DBL_Counter(x) ( (DBL)(x) )
- #define Long_To_Counter(i,x) { (x) = i; }
- #define Init_Counter(x) { (x) = 0L; }
- #define Increase_Counter(x) { (x)++; }
- #define Test_Zero_Counter(x) ((x) == 0L)
- #define Add_Counter(x, a, b) { (x) = (a) + (b); }
-
- #endif
-
-
-
- /*****************************************************************************
- *
- * Bounding box stuff (see also BOUND.H).
- *
- *****************************************************************************/
-
- typedef struct Bounding_Box_Struct BBOX;
-
- struct Bounding_Box_Struct
- {
- BBOX_VECT Lower_Left, Lengths;
- };
-
-
-
- /*****************************************************************************
- *
- * Transformation stuff.
- *
- *****************************************************************************/
-
- typedef struct Transform_Struct TRANSFORM;
-
- struct Transform_Struct
- {
- MATRIX matrix;
- MATRIX inverse;
- };
-
- #define Destroy_Transform(x) if ((x)!=NULL) POV_FREE(x)
-
-
-
- /*****************************************************************************
- *
- * Color map stuff.
- *
- *****************************************************************************/
-
- #define MAX_BLEND_MAP_ENTRIES 256
-
- typedef struct Blend_Map_Entry BLEND_MAP_ENTRY;
- typedef struct Blend_Map_Struct BLEND_MAP;
- typedef struct Pattern_Struct TPATTERN;
- typedef struct Texture_Struct TEXTURE;
- typedef struct Pigment_Struct PIGMENT;
- typedef struct Tnormal_Struct TNORMAL;
- typedef struct Finish_Struct FINISH;
- typedef struct Turb_Struct TURB;
- typedef struct Warps_Struct WARP;
- typedef struct Halo_Struct HALO;
-
- struct Blend_Map_Entry
- {
- SNGL value;
- unsigned char Same;
- union
- {
- COLOUR Colour;
- PIGMENT *Pigment;
- TNORMAL *Tnormal;
- TEXTURE *Texture;
- UV_VECT Point_Slope;
- } Vals;
- };
-
- struct Blend_Map_Struct
- {
- short Number_Of_Entries, Transparency_Flag, Type;
- long Users;
- BLEND_MAP_ENTRY *Blend_Map_Entries;
- };
-
- #define Make_Blend_Map_Entry(entry,v,s,r,g,b,a,t) \
- { \
- (entry).value = (v); \
- (entry).Same = (s); \
- Make_ColourA((entry).Vals.Colour, r, g, b, a, t); \
- }
-
-
- /*****************************************************************************
- *
- * IFF file stuff.
- *
- *****************************************************************************/
-
- typedef struct Image_Colour_Struct IMAGE_COLOUR;
-
- typedef struct Image_Line_Struct IMAGE_LINE;
-
- struct Image_Colour_Struct
- {
- unsigned short Red, Green, Blue, Filter, Transmit;
- };
-
- struct Image_Line_Struct
- {
- unsigned char *red, *green, *blue, *transm;
- };
-
-
-
- /*****************************************************************************
- *
- * Image stuff.
- *
- *****************************************************************************/
-
- /* Legal image attributes. */
-
- #define NO_FILE 0x0000
- #define GIF_FILE 0x0001
- #define POT_FILE 0x0002
- #define SYS_FILE 0x0004
- #define IFF_FILE 0x0008
- #define TGA_FILE 0x0010
- #define GRAD_FILE 0x0020
- #define PGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM_FILE 0x004_malloc ((siPGM((siPGM_FILE (x)!=NULL) ((si004_mM_FILE L) ((si ; (x)!=NULF